View Javadoc
1 /* 2 * PreferencesTreeModel 3 * 4 * $RCSfile: PreferencesTreeModel.java,v $ 5 * $Revision: 1.3 $ 6 * $Date: 2004/01/10 20:10:46 $ 7 * $Source: /cvsroot/jpui/jpui/src/PreferencesTreeModel.java,v $ 8 * 9 * JPUI - Java Preferences User Interface 10 * Copyright (C) 2003 11 * 12 * This program is free software; you can redistribute it and/or modify it 13 * under the terms of the GNU General Public License as published by the Free 14 * Software Foundation; either version 2 of the License, or (at your option) 15 * any later version. 16 * 17 * This program is distributed in the hope that it will be useful, but WITHOUT 18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 20 * more details. 21 * 22 * You should have received a copy of the GNU General Public License along with 23 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple 24 * Place, Suite 330, Boston, MA 02111-1307 USA 25 * 26 * Author: macksold@users.sourceforge.net 27 */ 28 29 import java.util.Collections; 30 import java.util.Stack; 31 import java.util.Vector; 32 import java.util.prefs.BackingStoreException; 33 import java.util.prefs.Preferences; 34 35 import javax.swing.event.TreeModelEvent; 36 import javax.swing.event.TreeModelListener; 37 import javax.swing.tree.TreeModel; 38 import javax.swing.tree.TreePath; 39 40 /*** 41 * Class that exposes java preferences as a TreeModel. 42 * RootPreferencesNode is a root node to the TreeModel which 43 * turns the User preference root and System preference root 44 * into its child nodes. The root nodes two children and all of their descendants 45 * are of type PreferencesNode. 46 */ 47 public class PreferencesTreeModel implements TreeModel { 48 // vector of listeners to send tree change events to 49 private Vector moListeners = new Vector(); 50 // root of the preference tree 51 private RootPreferencesNode moRoot = new RootPreferencesNode(); 52 53 /*** 54 * @see javax.swing.tree.TreeModel#getRoot() 55 */ 56 public Object getRoot() { 57 return moRoot; 58 } 59 60 /*** 61 * @see javax.swing.tree.TreeModel#getChild(java.lang.Object, int) 62 */ 63 public Object getChild(Object oParent, int nIndex) { 64 Preferences oPref = (Preferences) oParent; 65 Preferences oChild = null; 66 try { 67 String[] sChildren = oPref.childrenNames(); 68 oChild = oPref.node(sChildren[nIndex]); 69 } 70 catch (BackingStoreException oEx) { 71 oEx.printStackTrace(); 72 } 73 74 return oChild; 75 } 76 77 /*** 78 * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object) 79 */ 80 public int getChildCount(Object oParent) { 81 Preferences oPref = (Preferences) oParent; 82 int nCount = 0; 83 try { 84 nCount = oPref.childrenNames().length; 85 } 86 catch (BackingStoreException oEx) { 87 oEx.printStackTrace(); 88 } 89 90 return nCount; 91 } 92 93 /*** 94 * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object) 95 */ 96 public boolean isLeaf(Object oNode) { 97 return false; 98 } 99 100 /*** 101 * @see javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath, java.lang.Object) 102 */ 103 public void valueForPathChanged(TreePath oPath, Object oNewValue) { 104 Preferences oOldValue = (Preferences) oPath.getLastPathComponent(); 105 106 for (int i = 0; i < moListeners.size(); i++) { 107 TreeModelEvent oEvent = 108 new TreeModelEvent(this, new Object[] { moRoot }); 109 110 ((TreeModelListener) moListeners.elementAt(i)).treeNodesChanged( 111 oEvent); 112 } 113 } 114 115 /*** 116 * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object, java.lang.Object) 117 */ 118 public int getIndexOfChild(Object oParent, Object oChild) { 119 if (oParent == null || oChild == null) { 120 return -1; 121 } 122 int nIndex = -1; 123 Preferences oPref = (Preferences) oParent; 124 Preferences oPrefChild = (Preferences) oChild; 125 try { 126 String[] sChildren = oPref.childrenNames(); 127 for (int i = 0; i < sChildren.length; i++) { 128 if (sChildren[i].equals(oPrefChild.name())) { 129 nIndex = i; 130 break; 131 } 132 } 133 } 134 catch (BackingStoreException oEx) { 135 oEx.printStackTrace(); 136 } 137 138 return nIndex; 139 } 140 141 /*** 142 * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener) 143 */ 144 public void addTreeModelListener(TreeModelListener oListener) { 145 moListeners.add(oListener); 146 } 147 148 /*** 149 * @see javax.swing.tree.TreeModel#removeTreeModelListener(javax.swing.event.TreeModelListener) 150 */ 151 public void removeTreeModelListener(TreeModelListener oListener) { 152 moListeners.remove(oListener); 153 } 154 155 /*** 156 * @param sNewNode 157 */ 158 public void newNode(String sNewNode) { 159 // create the node 160 Preferences oNewNode = 161 PreferencesModel.Instance().newNode(sNewNode); 162 163 // send notifications 164 for (int i = 0; i < moListeners.size(); i++) { 165 TreeModelEvent oEvent = 166 new TreeModelEvent(this, toTreePath(oNewNode.parent())); 167 ((TreeModelListener) moListeners.elementAt(i)).treeStructureChanged( 168 oEvent); 169 } 170 } 171 172 /*** 173 * 174 */ 175 public void deleteNode() { 176 // delete the node 177 Preferences oParent = PreferencesModel.Instance().deleteNode(); 178 179 // send notifications 180 for (int i = 0; i < moListeners.size(); i++) { 181 TreeModelEvent oEvent = 182 new TreeModelEvent(this, toTreePath(oParent)); 183 ((TreeModelListener) moListeners.elementAt(i)).treeStructureChanged( 184 oEvent); 185 } 186 } 187 188 /*** 189 * @param oPref 190 * @return javax.swing.tree.TreePath 191 */ 192 public TreePath toTreePath(Preferences oPref) { 193 Stack oStack = new Stack(); 194 195 while(oPref != null) { 196 oStack.push(oPref); 197 oPref = oPref.parent(); 198 } 199 // oStack now contains all the nodes up the the root, except the root 200 oStack.push(moRoot); 201 202 // reverse the order of the stack elements 203 Collections.reverse(oStack); 204 205 return new TreePath(oStack.toArray(new Preferences[0])); 206 } 207 }

This page was automatically generated by Maven